|
は プログラミング言語 のインタープリタ/バーチャルマシン。1993年に初めてリリースされた〔Blandy 1997, p. 102.〕。 はPOSIXシステムコールのモジュール化された拡張やAPL アレイの機能などを含み、オブジェクト〔「」 、、1997年, p.89.〕 ライブラリとしてパッケージングされている。「」を使うことで、を他のプログラムの中に組み込んで、 他言語との密接な統合が可能なインターフェースとして使用することができる〔「」、1997年, pp. 94, 96.〕。 名前「」は「」から来ている。後付けのものではないが(注を参照)公式ウェブページの冒頭にあらわれたのは2011年の春頃である〔Internet Archive Weyback Machine で確認。2011年1月1日のスナップショットには無いが、同年5月14日のアーカイブにはある。1997年7月のGNU's Bulletin, vol. 1 no. 23 で確認できるので、後付けではない。〕。 はGNUプロジェクトの「公式の」 拡張言語であるが、 2006年の時点で、人気のあるプロジェクトの中でこの言語を使っているものは十指に満たない。その名称については、での議論の中で、〔「」、 1995年〕によって提唱された。 基本的なアイデアは、「開発者は基本的なアルゴリズムやデータ構造はCやC++に実装し、機能や型をインタープリタ用のコードにエクスポートする。アプリケーションはインタープリタが統括するプリミティブのライブラリとなることで、コンパイルされたコードの効率とインタープリタの柔軟性の双方を備えることができる。」というものである〔 1997年、pp 87.〕。 ==標準への遵守 == その歴史の多くの部分において、は標準に厳密に従っていたわけではなかった。 〔「」、1995年〕 現在のでは、空のリストとブーリアン型の #f は区別される。シンボルの大文字/小文字は区別されるが、のレキシカルスキャナ兼パーサである における分岐により、はシンボルでの大文字/小文字の区別をやめることができる。最近採用された標準R6RSは、R5RS以前の標準から離れて、大文字/小文字の区別をデフォルトとして採用している。とアプリケーションとの密接な連携にはコストが伴う。は再帰を頻繁に行うので、末尾再帰を最適化した実装を要求するが、ほとんどのテクニックは相互運用性を損なうものである。は、純粋にの関数やプログラムの中で末尾再帰を最適化するよう妥協し、C言語の関数が視野に入ったときは末尾再帰をあきらめるということを強いられる〔Blandy 1997, p. 99.〕。標準のもうひとつの要求であるの実装も、不満足なものである。— C言語で継続を扱うには、C言語のスタック全体をヒープにコピーすることが必要になる〔「」、1997年、p. 99.〕。ガベージコレクションもまた、効率的なものとはなりえない。C言語のコードはのコードへのポインタを持つことができなければならないからだ。必要なセルの消失を避けるためには、のガベージコレクタは保守的なものにならざるを得ず、再利用される可能性のあるセルを失う可能性がある〔、1997年、pp. 99–100.〕。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「GNU Guile」の詳細全文を読む スポンサード リンク
|